2020 It邦幫忙鐵人賽 系列文章
由於我比較熟悉 GCP / GKE 的服務,這篇的操作過程都會以 GCP 平台作為範例,不過操作過程大體上是跨平台通用的。
寫文章真的是體力活,覺得我的文章還有參考價值,請左邊幫我點讚按個喜歡,右上角幫我按個追縱,底下歡迎留言討論。給我一點繼續走下去的動力。
對我的文章有興趣,歡迎到我的網站上 https://chechiachang.github.io 閱讀其他技術文章,有任何謬誤也請各方大德直接聯繫我,感激不盡。
DON'T DO THIS
+----+ +----+
| M1 |---------| R1 |
| S1 | | S2 |
+----+ +----+
Configuration: quorum = 1
這個設定下,如果 M1 掛了需要 failover,很有可能 S1 跟著機器一起掛了,S2 會沒有辦法取得多數來執行 failover,整個系統掛掉
+----+
| M1 |
| S1 |
+----+
|
+----+ | +----+
| R2 |----+----| R3 |
| S2 | | S3 |
+----+ +----+
Configuration: quorum = 2
這是最基本的蛋又兼顧安全設定的設置
如果 M1 死了 S1 跟著機器故障,S2 與 S3 還可以取得多數,順利 failover 到 R2 或是 R3。
+----+
| M1 |
| S1 | <- C1 (writes will be lost)
+----+
|
/
/
+------+ | +----+
| [M2] |----+----| R3 |
| S2 | | S3 |
+------+ +----+
為了避免這種情形,做額外的設定
當 master 發現自己再也無法 sync 到足夠的 slave,表示 master 可能被孤立,這時主動拒絕客戶端的寫入請求。客戶端被拒絕後,會再向 sentinel 取得有效的 master,重新執行寫入請求,確保資料寫到有效的 master 上。
+----+ +----+
| M1 |----+----| R1 |
| | | | |
+----+ | +----+
|
+------------+------------+
| | |
| | |
+----+ +----+ +----+
| C1 | | C2 | | C3 |
| S1 | | S2 | | S3 |
+----+ +----+ +----+
有些情形,redis 這端只有兩台可用機器,這種情形可以考慮把 sentinel 放在客戶端的機器上
+----+ +----+
| M1 |----+----| R1 |
| S1 | | | S2 |
+----+ | +----+
|
+------+-----+
| |
| |
+----+ +----+
| C1 | | C2 |
| S3 | | S4 |
+----+ +----+
Configuration: quorum = 3
+----+ +----+
| M1 |----+----| R1 |
| S1 | | | S2 |
+----+ | +----+
|
|
|
+----+
| C1 |
| S3 |
+----+
Configuration: quorum = 2